package com.example.cloudcity.servlet;

import jakarta.servlet.ServletException; // 导入ServletException类，用于处理Servlet异常
import jakarta.servlet.http.HttpServlet; // 导入HttpServlet类，作为Servlet的基类
import jakarta.servlet.http.HttpServletRequest; // 导入HttpServletRequest类，用于处理请求
import jakarta.servlet.http.HttpServletResponse; // 导入HttpServletResponse类，用于处理响应
import com.google.gson.Gson; // 导入Gson类，用于处理JSON
import com.google.gson.JsonObject; // 导入JsonObject类，用于处理JSON对象
import com.example.cloudcity.utils.LogUtils; // 导入LogUtils类，用于日志记录

import java.io.*; // 导入输入输出相关类
import java.sql.*; // 导入SQL相关类

public class OrderServlet extends HttpServlet {
    private static final String DB_URL = "jdbc:mysql://localhost:3306/game"; // 数据库URL
    private static final String USER = "root"; // 数据库用户名
    private static final String PASS = "1234"; // 数据库密码
    private final Gson gson = new Gson(); // 创建Gson实例，用于JSON处理

    // 处理POST请求
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("application/json;charset=UTF-8"); // 设置响应内容类型为JSON

        try {
            StringBuilder sb = new StringBuilder(); // 用于存储请求体内容
            try (BufferedReader reader = request.getReader()) { // 读取请求体
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line); // 将每一行追加到StringBuilder中
                }
            }

            JsonObject jsonData = gson.fromJson(sb.toString(), JsonObject.class); // 解析JSON数据

            // 连接数据库并插入订单信息
            try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
                 PreparedStatement stmt = conn.prepareStatement(
                         "INSERT INTO game_order (total, amount, status, paytype, gamename, gameimg, gametxt, user_id) " +
                         "VALUES (?, ?, ?, ?, ?, ?, ?, ?)")) {

                // 设置SQL语句中的参数
                stmt.setBigDecimal(1, new java.math.BigDecimal(jsonData.get("total").getAsString())); // 设置总金额
                stmt.setBigDecimal(2, new java.math.BigDecimal(jsonData.get("amount").getAsString())); // 设置订单金额
                stmt.setString(3, jsonData.get("status").getAsString()); // 设置订单状态
                stmt.setString(4, jsonData.get("paytype").getAsString()); // 设置支付方式
                stmt.setString(5, jsonData.get("gamename").getAsString()); // 设置游戏名称
                stmt.setString(6, jsonData.get("gameimg").getAsString()); // 设置游戏图片
                stmt.setString(7, jsonData.get("gametxt").getAsString()); // 设置游戏描述
                stmt.setLong(8, jsonData.get("user_id").getAsLong()); // 设置用户ID

                int result = stmt.executeUpdate(); // 执行插入操作

                if (result > 0) {
                    // 返回成功响应
                    JsonObject response_data = new JsonObject();
                    response_data.addProperty("success", true);
                    response_data.addProperty("message", "订单创建成功");
                    response.getWriter().write(gson.toJson(response_data));
                } else {
                    // 返回错误响应
                    JsonObject error_response = new JsonObject();
                    error_response.addProperty("success", false);
                    error_response.addProperty("error", "订单创建失败");
                    response.getWriter().write(gson.toJson(error_response));
                }
            }
        } catch (Exception e) { // 捕获异常
            System.err.println("Error creating order: " + e.getMessage()); // 打印错误信息
            e.printStackTrace(); // 打印异常堆栈
            JsonObject error_response = new JsonObject(); // 创建错误响应JSON对象
            error_response.addProperty("success", false); // 设置失败标志
            error_response.addProperty("error", e.getMessage()); // 设置错误消息
            response.getWriter().write(gson.toJson(error_response)); // 返回错误响应
        }
    }
}
